call, apply用法以及模拟实现
call, apply
call,apply都是在指定一个this和若干个指定的参数的前提下,执行某个函数或方法
call
, apply
方法第一个参数都是指定的 this
call
方法第二个参数开始是参数列表
apply
方法第二个参数是参数数组
模拟实现call
剖析call具体的作用,相当于把function挂载在指定的对象的一个属性属性上,通过对象属性执行该function,删除对象上的该属性。
1 | var obj = { name: 'obj' } |
利用ES6语法
模拟call,还需要处理call的从第二个参数开始的若干参数值。
1 | Function.prototype.call2 = function(context, ...args) { |
可以看到,我们用了ES6的语法来获取call的剩余参数,实属不妥,还是用ES3的语法来模拟,所以我们需要从arguments对象中来获取参数值。
1 | Function.prototype.call2 = function(context) { |
call写出来了,那apply其实也简单,处理参数逻辑修改下即可
模拟实现apply
1 | Function.prototype.apply2 = function (context, arr) { |
总结
在不同的学习阶段,回过头来看这些基础的知识点,会有另外的一种思路/看法。